package dao.xml.sax;

import static org.junit.Assert.*;

import java.io.ByteArrayInputStream;
import java.util.List;

import model.Datentraeger;
import model.Film;

import org.junit.Test;

public class SaxExampleTestWithLocalData 
{

  private final String data =
      "<?xml version='1.0' encoding='UTF-8'?> " +
          "<datentraegers> " +
          "  <datentraeger name='datentraeger1'> " +
          "    <filme> " +
          "      <film id='1234' name='film1' hauptdarsteller='hauptdarsteller1' genre='Aktion' laenge='120'/> " +
          "      <film id='1235' name='film2' hauptdarsteller='hauptdarsteller2' genre='Komoedie' laenge='90'/> " +
          "      <film id='1236' name='film3' hauptdarsteller='hauptdarsteller3' genre='Science Fiction' laenge='100'/> " +
          "      <film id='1237' name='film4' hauptdarsteller='hauptdarsteller4' genre='Horror' laenge='110'/> " +
          "    </filme> " +
          "  </datentraeger> " +
          "  <datentraeger name='datentraeger2'> " +
          "    <filme> " +
          "      <film id='1238' name='film2.1' hauptdarsteller='hauptdarsteller1' genre='Aktion' laenge='120'/> " +
          "      <film id='1239' name='film2.2' hauptdarsteller='hauptdarsteller2' genre='Komoedie' laenge='90'/> " +
          "      <film id='1240' name='film2.3' hauptdarsteller='hauptdarsteller3' genre='Science Fiction' laenge='100'/> " +
          "      <film id='1241' name='film2.4' hauptdarsteller='hauptdarsteller4' genre='Horror' laenge='110'/> " +
          "    </filme> " +
          "  </datentraeger> " +
          "</datentraegers>";

  @Test
  public void extractDatentraegerNameAttribute() throws Exception 
  {
    SaxExample example = new SaxExample();
    List<Datentraeger> datentraegers = example.getDatentraegers(new ByteArrayInputStream(data.getBytes()));
    assertEquals(2, datentraegers.size());
    Datentraeger datentraeger1 = datentraegers.get(0);
    assertEquals("datentraeger1", datentraeger1.getName());
    assertEquals(4, datentraeger1.getFilme().size());
    assertFilm(((long) 1234), "film1", "hauptdarsteller1", "Aktion", 120, datentraeger1.getFilmByIndex(0));
    assertFilm(((long) 1235), "film2", "hauptdarsteller2", "Komoedie", 90, datentraeger1.getFilmByIndex(1));
    assertFilm(((long) 1236), "film3", "hauptdarsteller3", "Science Fiction", 100, datentraeger1.getFilmByIndex(2));
    assertFilm(((long) 1237), "film4", "hauptdarsteller4", "Horror", 110, datentraeger1.getFilmByIndex(3));
    
    Datentraeger datentraeger2 = datentraegers.get(1);
    assertEquals("datentraeger2", datentraeger2.getName());
    assertEquals(4, datentraeger2.getFilme().size());
    assertFilm(((long) 1238), "film2.1", "hauptdarsteller1", "Aktion", 120, datentraeger2.getFilmByIndex(0));
    assertFilm(((long) 1239), "film2.2", "hauptdarsteller2", "Komoedie", 90, datentraeger2.getFilmByIndex(1));
    assertFilm(((long) 1240), "film2.3", "hauptdarsteller3", "Science Fiction", 100, datentraeger2.getFilmByIndex(2));
    assertFilm(((long) 1241), "film2.4", "hauptdarsteller4", "Horror", 110, datentraeger2.getFilmByIndex(3));
  }


private void assertFilm(long id, String name, String hauptdarsteller, String genre, int laenge, Film film) 
  {
    assertEquals(name, film.getName());
    assertEquals(hauptdarsteller, film.getHauptdarsteller());
    assertEquals(genre, film.getGenre());
    assertEquals(laenge, film.getLaenge());
  }
}
